package fenetre;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

import javax.swing.*;

import composantes.SimpleDataSource;

public class FenetreBD extends JFrame implements ActionListener{
	
	JTextField nomRouge = new JTextField();
	JTextField nomVert = new JTextField();
	JTextField nomBleu = new JTextField();
	JTextField nomJaune = new JTextField();
	JTextField prenomRouge = new JTextField();
	JTextField prenomVert = new JTextField();
	JTextField prenomBleu = new JTextField();
	JTextField prenomJaune = new JTextField();
	JButton submit = new JButton("Submit");
	int joueurGagnant = 0,
		_score[];
	
	public FenetreBD(int score[], int nbJoueur){
		super("Fin de partie");
		build(score, nbJoueur);
	}
	private void build(int score[], int nbJoueur){
		setLayout(new BorderLayout());
		_score = score;
		JPanel north = new JPanel(new FlowLayout());
		north.setAlignmentX(CENTER_ALIGNMENT);
		JLabel gagnant = new JLabel();
		for(int i=0;i<nbJoueur;i++){
			if(score[i] >= score[joueurGagnant])
				joueurGagnant = i;
		}
		switch(joueurGagnant){
		case 0:
			gagnant.setText("Les rouges ont gagné");
			break;
		case 1:
			gagnant.setText("Les verts ont gagné");
			break;
		case 2:
			gagnant.setText("Les bleus ont gagné");
			break;
		case 3:
			gagnant.setText("Les jaunes ont gagné");
		}
		
		north.add(gagnant);
		
		JPanel center = new JPanel(new GridLayout(3, nbJoueur+1));
		JLabel rouges = new JLabel("Rouges");
		JLabel verts = new JLabel("Verts");
		JLabel jaunes = new JLabel("Jaunes");
		JLabel bleus = new JLabel("Bleus");
		JLabel couleur = new JLabel("Couleur : ");
		JLabel nom = new JLabel("Nom : ");
		JLabel prenom = new JLabel("Prenom : ");
		center.add(couleur);
		center.add(rouges);
		center.add(verts);
		switch(nbJoueur){
		case 2:
			center.add(nom);
			center.add(nomRouge);
			center.add(nomVert);
			center.add(prenom);
			center.add(prenomRouge);
			center.add(prenomVert);
			break;
		case 3:
			center.add(bleus);
			center.add(nom);
			center.add(nomRouge);
			center.add(nomVert);
			center.add(nomBleu);
			center.add(prenom);
			center.add(prenomRouge);
			center.add(prenomVert);
			center.add(prenomBleu);
			break;
		case 4:
			center.add(bleus);
			center.add(jaunes);
			center.add(nom);
			center.add(nomRouge);
			center.add(nomVert);
			center.add(nomBleu);
			center.add(nomJaune);
			center.add(prenom);
			center.add(prenomRouge);
			center.add(prenomVert);
			center.add(prenomBleu);
			center.add(prenomJaune);
		}
		
		JPanel south = new JPanel(new FlowLayout());
		south.setAlignmentX(CENTER_ALIGNMENT);
		submit.addActionListener(this);
		south.add(submit);
		
		add(north, BorderLayout.NORTH);
		add(center, BorderLayout.CENTER);
		add(south, BorderLayout.SOUTH);
		setPreferredSize(new Dimension(800, 600));
		pack();
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		int noPartie,
			noJoueur;
		
		if(e.getSource() == submit){
			try {
				SimpleDataSource.init("database.properties");
				Connection conn = SimpleDataSource.getConnection();
				try {
					String couleurG = "Partie Null";
					switch(joueurGagnant){
					case 0:
						couleurG = "Rouge";
						break;
					case 1:
						couleurG = "Vert";
						break;
					case 2:
						couleurG = "Bleu";
						break;
					case 3:
						couleurG = "Jaune";
					}
					Statement stat = conn.createStatement();
					DateFormat dateFormat = new SimpleDateFormat("yyyy:MM:dd");
					Calendar cal = Calendar.getInstance();
					ResultSet result = stat.executeQuery("Select noPartie from Partie ORDER BY noPartie DESC");
					result.next();
					noPartie = result.getInt(1);
					
					result = stat.executeQuery("Select noJoueur from Joueur ORDER BY noJoueur DESC");
					result.next();
					noJoueur = result.getInt(1);
					
					stat.execute("INSERT INTO Partie VALUES(" + (noPartie+1) + "," + _score[joueurGagnant] + ",'" + dateFormat.format(cal.getTime()) + "','" + couleurG + "')");
					
					switch(_score.length){
					case 2:
						stat.execute("INSERT INTO Joueur VALUES(" + (noJoueur+1) + ",'" + nomRouge.getText() + "','" + prenomRouge.getText() + "')");
						stat.execute("INSERT INTO Joueur VALUES(" + (noJoueur+2) + ",'" + nomVert.getText() + "','" + prenomVert.getText() + "')");
						stat.execute("INSERT INTO PartieJoueur VALUES(" + (noPartie+1) + "," + (noJoueur+1) + "," + _score[0] + ",'Rouge')");
						stat.execute("INSERT INTO PartieJoueur VALUES(" + (noPartie+1) + "," + (noJoueur+2) + "," + _score[1] + ",'Vert')");
						break;
					case 3:
						stat.execute("INSERT INTO Joueur VALUES(" + (noJoueur+1) + ",'" + nomRouge.getText() + "','" + prenomRouge.getText() + "')");
						stat.execute("INSERT INTO Joueur VALUES(" + (noJoueur+2) + ",'" + nomVert.getText() + "','" + prenomVert.getText() + "')");
						stat.execute("INSERT INTO Joueur VALUES(" + (noJoueur+3) + ",'" + nomBleu.getText() + "','" + prenomBleu.getText() + "')");
						stat.execute("INSERT INTO PartieJoueur VALUES(" + (noPartie+1) + "," + (noJoueur+1) + "," + _score[0] + ",'Rouge')");
						stat.execute("INSERT INTO PartieJoueur VALUES(" + (noPartie+1) + "," + (noJoueur+2) + "," + _score[1] + ",'Vert')");
						stat.execute("INSERT INTO PartieJoueur VALUES(" + (noPartie+1) + "," + (noJoueur+3) + "," + _score[2] + ",'Bleu')");
						break;
					case 4:
						stat.execute("INSERT INTO Joueur VALUES(" + (noJoueur+1) + ",'" + nomRouge.getText() + "','" + prenomRouge.getText() + "')");
						stat.execute("INSERT INTO Joueur VALUES(" + (noJoueur+2) + ",'" + nomVert.getText() + "','" + prenomVert.getText() + "')");
						stat.execute("INSERT INTO Joueur VALUES(" + (noJoueur+3) + ",'" + nomBleu.getText() + "','" + prenomBleu.getText() + "')");
						stat.execute("INSERT INTO Joueur VALUES(" + (noJoueur+4) + ",'" + nomJaune.getText() + "','" + prenomJaune.getText() + "')");
						stat.execute("INSERT INTO PartieJoueur VALUES(" + (noPartie+1) + "," + (noJoueur+1) + "," + _score[0] + ",'Rouge')");
						stat.execute("INSERT INTO PartieJoueur VALUES(" + (noPartie+1) + "," + (noJoueur+2) + "," + _score[1] + ",'Vert')");
						stat.execute("INSERT INTO PartieJoueur VALUES(" + (noPartie+1) + "," + (noJoueur+3) + "," + _score[2] + ",'Bleu')");
						stat.execute("INSERT INTO PartieJoueur VALUES(" + (noPartie+1) + "," + (noJoueur+4) + "," + _score[3] + ",'Jaune')");
					}
				}
				finally{
					conn.close();
				}
				
			} catch (ClassNotFoundException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			
		}
		
	}
}